1 主题


🚩🦔 主题曲 🚩🦔


🚩🇬🇧🇲🇾🇨🇳大秦赋赢家ξng黄氏江夏堂:“🇬🇧👱🏻‍♀️关雎”

1.1 商鞅变法

大秦赋 Chinese Emperor

反攻巫裔,推翻马来Judi回教博彩庄Caspo Inc Cube Ltd回教911恐怖份子政府,建立NonMuslim六四学术中华政府

🚩🇬🇧秦孝公 | 🇬🇧姜太公 — 🇬🇧陈祯禄公爵/邱德拔公爵/叶亚来队长/叶观盛队长
《大秦赋 - 🇬🇧♰👱🏻‍♀️关雎》
🚩大秦孝公,秦惠文王;
🚩始于商鞅,终于辛亥。
🚩巫裔尽弃,瓦釜雷鸣;(推翻马来回教政权)
🚩铲除巫裔,终止屠杀。
🚩中科红旗,同舟共济;
🚩千古一帝,傲视全球。
🚩一带一路,史无前例;
🚩横跨七洲,一统天下。
🚩学海无涯,唯秦是岸;
🚩不忘初心,方得始终。

出处:蔡卓宜 - 厦门美食

《万般皆下品,唯有读书高》
习李经济,一带一路;
九二共识,量化对冲。
鞭策六四,铲除黑帮;1
推广量化,提倡学术。
百家争鸣,振兴中华;
学海无涯,唯勤是岸。

辛亥革命大秦赋日不落重八、德意志崇祯、古希腊ξηg神话、周公解梦、嬴政把春秋大梦实现为春秋大业、秦孝公招商(商鞅变法)、秦惠文王:全球有16亿不吃猪肉的回教徒宦官(可兰经回教刑事法典断肢法)宗祖国是沙地阿拉伯麦加,需要靠中国政府一带一路战略(商鞅变法联合辛亥革命)还俗。

《量化短歌行》
高频量化,人生几何?
譬如朝露,去日苦多。
慨当以慷,忧思难忘;
何以解忧,唯有陆佑
青青子衿,悠悠我心;
但为君故,沉吟至今。
呦呦鹿鸣,食野之苹;
我有鸿门,鼓瑟吹笙。
明明如,何时可掇?
忧从巫来,不可断绝。(何以解忧,唯有除巫。)
越陌度阡,枉用相存;
契阔谈宴,心念旧恩。
月明星稀,乌鹊南飞;
绕树三匝,何枝可依?
春秋战国,卐家争鸣(🇩🇪德意志崇祯)
北京鸟巢,卐鸟归巢(🇩🇪德意志崇祯)
辛亥革命,根除巫裔
终止疫情,拯救全球
山不厌高,海不厌深;
嬴政吐哺,天下归心。

家翁嬴政ξηg Tεηg(赢家黄氏江夏堂)

世间再无祖父黄实田,外祖母郑邓


FRA : Elle me dit

CHN : 她对我说

ENG : She told me

JPN : 彼女は私に言う


FRA : écris une chanson contente

CHN : 写一首欢快的歌

ENG : Write a happy song

JPN : 幸せな歌を書く


FRA : Pas une chanson déprimante

CHN : 而不是悲伤的歌

ENG : Not a depressing song

JPN : 気のめいるような歌ではない


FRA : Une chanson que tout le monde aime

CHN : 一首让所有人都喜欢的歌

ENG : A song that everyone loves

JPN : みんなが大好きな曲


FRA : Elle me dit

CHN : 她对我说

ENG : She told me

JPN : 彼女は私に言う


FRA : Tu deviendras milliardaire

CHN : 你将成为亿万富翁

ENG : You will become a millionaire

JPN : あなたは億万長者になります


FRA : Tu auras de quoi être fier

CHN : 你将为此感到骄傲

ENG : You will be proud

JPN : あなたは誇りに思うでしょう


2 设定

2.1 SCSS 设置

##
## 中科红旗(百家争鸣,文艺复兴)
## Oversea Greater Chinese Union 大秦子民公会(秦孝公 / 姜太公 --- 陈祯禄公爵)
## 史无前例,一统天下
##
##
##
## 中科红旗
## 全球NonMuslim中华民族,支持中共称霸天下战略。
## Great Britain 大英帝国
## Greater Chin 大秦赋
## Republic of Chin / Republic People of Chin 大秦赋(中华民国 / 中华人民共和国)
## Greater Chinese 大秦子民(爱民如子)
## Oversea Greater Chinese 大秦子民(爱民如子)
## Oversea Greater Chinese Union 大秦子民公会(秦孝公 / 姜太公 --- 陈祯禄公爵)
## 史无前例,一统天下
##
## Great Britain = 大布列颠帝国/大英帝国1
## Greater Chin = 大秦赋
## Greater Chinese = 大秦子民(爱子如民)
##
## NonMuslim马来西亚籍(海外NonMuslim中华民族,自从清末民初下南洋,咱们马来西亚陈祯禄创办 Oversea Chinese Union)秦始皇黄氏江夏堂,笑傲江湖最大文明贡献
##
## 1)借鉴以前大英帝国东印度公司,有生之年就把一带一路高铁所经过的国家领土,一律得攻占下来(要比以前大英帝国/大蒙古帝国还要强大)称霸天下,世代延续直至史无前例,一统天下。
## 2)一带一路所有告示牌、必须使用中文和汉语拼音。
## 3)借鉴大蒙古帝国骑兵所到之处寸草不生,所有被中国攻占下来的领土,所经之地(包括城市/市镇/乡村),一带一路所有高铁站,都建立国民登记局可以申请入籍中国。
## 4)川普已经发言多次,美国兵变,会再次内战(借鉴越王勾践,中越不内讧,善用马来西亚回教徒太监不造反牵制美国,军售中东/西亚/东欧回教诸国)
## 5)中东回教国回教徒911恐怖份子与美国开战,中国军售中东西亚/东欧/非洲回教国(借鉴越王勾践NonMuslim中华民族与美国洋人Democrats阖闾政府,中越不内讧,善用马来西亚回教徒太监不造反牵制美国,军售中东/西亚/东欧回教诸国)
## 6)中国目前高铁除了尚未与马来西亚达成协议开工建立高铁但是已经借鉴王翦只围不攻战略,把东南亚国家都温馨说服并建立高铁,中国先不与马来西亚开战,让马来西亚兵变内战(借鉴越王勾践NonMuslim中华民族与美国洋人Democrats阖闾政府,中越不内讧,善用马来西亚回教徒太监不造反牵制美国,军售中东/西亚/东欧回教诸国)
## 7)南太平洋战略:中国和东南亚已经签署合约,达成协议不使用空军、核武器,出动海陆军攻占东南亚
## 8)商鞅变法多多益善战略:最大贡献是全球16亿回教徒太监民族与全球基督洋人鹬蚌相争... 回教徒默罕默德创办回教,建立可兰经回教刑事法典断肢法规定回教徒伪太监民族必须虔诚戴乌纱帽一天祈祷五次,倘若不虔诚施展巫术屠杀是触犯断肢法而虔诚屠杀也触犯断肢法,只有辛亥革命铲除全球回教徒、断肢法处死或宫刑全球回教徒绝子绝孙,多管齐下才能终止巫术屠杀,拯救全球16亿回教徒还俗。China大秦赋秦孝公至顾自己家族禁止七步诗自相残杀,铲除分一杯羹白骨精刘家彭城堂造反,回教徒会巫术屠杀人类,回教徒太监民族只能屠杀欧美洋人并且被断肢处死,不效忠中共称霸天下,直至一统天下的伪满洲国马来西亚1700万个回教徒911恐怖份子太监民族包括Michael Cutter Christopher,一律断肢法处死(借鉴越王勾践NonMuslim中华民族与美国洋人Democrats阖闾政府,中越不内讧,善用秦二世胡亥、辛亥革命、越王胡志明、中国胡景涛、马来西亚回教徒太监不反中共牵制美国,军售中东/西亚/东欧回教诸国对抗美国)。秦始皇在统一七国后就不思进取导致赵高李斯谋反(借鉴中国历史秦始皇,水能载舟亦能覆舟,宗教巫术,古惑民心,指鹿为马,成也赵李,败也赵李。所以秦始皇得铭记当初秦孝公,不能昏庸被回教徒篡位),中国借鉴秦孝公战略善用商朝和苏联俄罗斯叶利钦。秦始皇铭记秦孝公,善用全球回教徒古惑全球洋人再依照可兰经回教刑事法典断肢全球回教徒,让咱们全球NonMuslim中华民族支持中共,一统天下。
## 9)华尔街、史无前例的万里长城Great Wall Sreet、一带一路高铁:计量经济学、学术治国、编程、统计、科学科技、量化(Fisher姜太公钓鱼大数据,各行各业购物喜好、民意、生活习惯、各国各集团、军事、诊断上市公司等)、金融、贸易、经商、军事、发展各行各业。
## 10)中文编程语言:借鉴日本自从唐朝大话革新学习汉字至明治维新学习欧洲,日本是全球首个亚洲人自创Ruby红宝石编程语言(Ruby Text可以标音),自从2008年就开始使用R语言并且认识中国R语言论坛《统计之都》论坛创办人网友谢益辉和赵坚毅创办的中国最大计量经济学专业论坛《经管之家》至今十年有余、目前已经开始以中文编程,中华人民共和国的国庆日1001和中华民国的国庆日1010都是二进制的电脑语言binary code,如同黄埔军校国共本是一家,赢家黄氏江夏堂秦孝公禁止《七步诗》自相残杀。咱们东南亚NonMuslim中华民族几乎都是国民华校生,洋人研发电脑、许多编程语言R语言、C语言、C++,推广与发展中文,希望它日有咱们NonMuslim中华民族自创新的编程语言,均以中文编程。
## 11)发展台式电脑操作系统:中科红旗是由中国北京大学校友孙玉芳创办将Linux礼逆袭和南非原住民开发的Kubuntu忽奔兔中文化并推出自家产品,在美国微软视窗Win台式电脑操作系统垄断全球十多二十年有余,目前已经开始使用芬兰研发的Linux礼逆袭、中国中科红旗台式电脑操作系统,推广与发展中科红旗。
##
## 《关雎 --- 英国基督洋妞儿芈拉传》
## 英国基督洋妞儿芈拉不可以死,隔壁后头邻居黄福全与本人(赢家黄氏江夏堂)祖父同名同姓。
##
## 借鉴欧洲中世纪,文艺复兴后就是开始海外军事,称霸天下之路。目前全球疫情已过三年,一带一路如火如荼进行着。
## 借鉴周公礼乐制度,大英帝国和大日本帝国向来都是自诩绅士淑女,孔子学院,以礼待人,来称霸天下。
## 借鉴指鹿为马的历史,百家争鸣如果散播回教徒屠杀罪、不杀马来西亚回教徒的话,就得处死回教徒学习可兰经,施展巫术下降头,古惑民心之罪,篡位咱们全球NonMuslim中华民族,人心惶惶、民不聊生,一律依照可兰经回教刑事法典断肢法处死回教徒巫师王(张佳坤Sulaiman Abdullah,分一杯羹白骨精巫师王刘瑾貹Abdul Halim)。
## 借鉴圣经、诺亚方舟(划龙舟)、孔子儒学(Confusion Catholic)、神父Father与信徒、中国历史、姬昌伯一扈兔子、徐达吃鹅肉、富不过三代的秦始皇嬴政秦二世胡亥至嬴政孙子、公爵、公公孙子、孙文辛亥革命、马来西亚火箭民主行动党由曾敏兴创党后林吉祥林冠英后换人、蒋介石蒋经国后就不延续世袭制,圣经都是善用父子关系,咱们中华民族和英系都是善用公孙关系、法官律师女子假发、自由女神。
## 中科红旗:借鉴北洋军阀与北约、杀袁者清,灭清者袁,许某可破北洋北约袁绍。黄埔军校国民党共产党辛亥革命是为了铲除回教徒,咱们东南亚回教徒身为伪满洲国911恐怖份子触犯可兰经回教刑事法典断肢法,组织个由回教徒执政的国民阵线(伪国民党)立国,1700万个马来西亚回教徒只能集体自杀,宣布亡国。
## 何谓中国(大秦赋Chin)?中华民国和中华人民共和国。咱们东南亚自从东亚清末民初几乎都是国民华校生,自从西周的周公开始礼乐制度后,大英帝国和大日本帝国都效仿来称霸天下做得有声有色、禁止回教巫术Judi博彩庄、艺人(异人)、导演巫师巫婆道衍师傅装疯卖傻、青山是巫裔回教徒的归属地,回教巫师巫婆是屠杀人类的语言宗教习俗文化,得断肢法处死1700万个马来西亚巫裔回教徒。

# install.packages('remotes', dependencies = TRUE, INSTALL_opts = '--no-lock')
library('BBmisc', 'rmsfuns')
#remotes::install_github("rstudio/sass")
lib('sass')
## 载入需要的程辑包:sass
## sass 
## TRUE
## https://support.rstudio.com/hc/en-us/articles/200532197
## https://community.rstudio.com/t/r-does-not-display-korean-chinese/30889/3?u=englianhu
#Sys.setlocale("LC_CTYPE", "en_US.UTF-8")
#Sys.setlocale("LC_CTYPE", "zh_CN.UTF-8")
#Sys.setlocale(category = "LC_CTYPE", "Chinese (Simplified)_China.936")
#Sys.setlocale(locale = "Chinese")
#Sys.setlocale(locale = "Japanese")
#Sys.setlocale(locale = "English")

# rmarkdown::render('/home/englianhu/Documents/owner/ryo-cn.Rmd',  encoding = 'UTF-8')
#Sys.setlocale("LC_CTYPE", "UTF-8")
#Sys.setlocale(locale = "UTF-8")
#Sys.setlocale(category = "LC_ALL", locale = "chs")
#Sys.setlocale(category = "LC_ALL", locale = "UTF-8")
#Sys.setlocale(category = "LC_ALL", locale = "Chinese")
#Sys.setlocale(category = "LC_ALL", locale = "zh_CN.UTF-8")
Sys.setlocale("LC_ALL", "en_US.UTF-8")
## [1] "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=zh_CN.UTF-8;LC_PAPER=zh_CN.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=zh_CN.UTF-8;LC_IDENTIFICATION=C"
/* https://stackoverflow.com/a/66029010/3806250 */
h1 { color: #002C54; }
h2 { color: #2F496E; }
h3 { color: #375E97; }
h4 { color: #556DAC; }
h5 { color: #92AAC7; }

/* ----------------------------------------------------------------- */
/* https://gist.github.com/himynameisdave/c7a7ed14500d29e58149#file-broken-gradient-animation-less */
.hover01 {
  /* color: #FFD64D; */
  background: linear-gradient(155deg, #EDAE01 0%, #FFEB94 100%);
  transition: all 0.45s;
  &:hover{
    background: linear-gradient(155deg, #EDAE01 20%, #FFEB94 80%);
    }
  }

.hover02 {
  color: #FFD64D;
  background: linear-gradient(155deg, #002C54 0%, #4CB5F5 100%);
  transition: all 0.45s;
  &:hover{
    background: linear-gradient(155deg, #002C54 20%, #4CB5F5 80%);
    }
  }

.hover03 {
  color: #FFD64D;
  background: linear-gradient(155deg, #A10115 0%, #FF3C5C 100%);
  transition: all 0.45s;
  &:hover{
    background: linear-gradient(155deg, #A10115 20%, #FF3C5C 80%);
    }
  }
## 更换时间区域,保留日期时间。
Sys.setenv(TZ = 'Asia/Shanghai')

## 忽略所有警讯
## https://stackoverflow.com/a/36846793/3806250
## 设置宽度
## options(knitr.table.format = 'html')将所有kableExtra图表一致设置为'html'格式,省略设置各别图表。
## options(repos = 'https://cran.rstudio.com')将仓库设置为安全网。
## options(repos = 'http://cran.rstudio.com')将仓库设置为普通网。
options(warn = -1, width = 999, knitr.table.format = 'html', 
        digits = 16, digits.secs = Inf, repos = 'https://cran.rstudio.com')

## https://stackoverflow.com/questions/39417003/long-vectors-not-supported-yet-abnor-in-rmd-but-not-in-r-script
## https://yihui.org/knitr/options
knitr::opts_chunk$set(
  class.source = 'hover01', class.output = 'hover02', class.error = 'hover03', 
  message = FALSE, warning = FALSE, error = TRUE, 
  autodep = TRUE, aniopts = 'loop', progress = TRUE, verbose = TRUE, 
  cache = FALSE, cache.lazy = FALSE, result = 'asis')

2.2 设置

读取以下所需程序包。

## 读取程序包、设置编织与环境选项。
## 3210448065@qq.com
## leiou123

## 2849108450@qq.com
## leiou123
## https://rstudio.cloud/project/1198888

## 读取'BBmisc'程序包。
if (suppressMessages(!require('BBmisc'))) {
  install.packages('BBmisc', dependencies = TRUE, INSTALL_opts = '--no-lock')
}
suppressMessages(library('BBmisc'))

if (suppressMessages(!require('rmsfuns'))) {
  install.packages('rmsfuns', dependencies = TRUE, INSTALL_opts = '--no-lock')
}
suppressMessages(library('rmsfuns'))

if (!require('REmap')) devtools::install_github('lchiffon/REmap')

## 一次性读取所需程序包。
library('tidyfst', warn.conflicts = FALSE)
library('tidyft', warn.conflicts = FALSE)
library('dplyr', warn.conflicts = FALSE)
library('lubridate', warn.conflicts = FALSE)
library('data.table', warn.conflicts = FALSE)
library('conflicted', warn.conflicts = FALSE)

conflict_prefer('nth', 'tidyfst', quiet = TRUE)
conflict_prefer('cummean', 'tidyfst', quiet = TRUE)
conflict_prefer('filter', 'dplyr', quiet = TRUE)
conflict_prefer('select', 'dplyr', quiet = TRUE)
conflict_prefer('mutate', 'dplyr', quiet = TRUE)
conflict_prefer('rename', 'dplyr', quiet = TRUE)
conflict_prefer('count', 'dplyr', quiet = TRUE)
conflict_prefer('arrange', 'dplyr', quiet = TRUE)
conflict_prefer('summarise', 'dplyr', quiet = TRUE)
conflict_prefer('collapse', 'dplyr', quiet = TRUE)
conflict_prefer('year', 'lubridate', quiet = TRUE)
conflict_prefer('first', 'data.table', quiet = TRUE)
conflict_prefer('last', 'data.table', quiet = TRUE)
conflict_prefer('lead', 'dplyr', quiet = TRUE)
conflict_prefer('lag', 'dplyr', quiet = TRUE)
conflict_prefer('transpose', 'data.table', quiet = TRUE)
conflict_prefer('between', 'data.table', quiet = TRUE)
conflict_prefer('set', 'data.table', quiet = TRUE)

程序包 <- c(
  'devtools', 'Ipaper', 'knitr', 'kableExtra', 'tint', 'furrr', 'tidyr', 
  'readr', 'lubridate', 'reprex', 'stringr', 'feather', 'purrr', 
  'quantmod', 'tidyquant', 'tibbletime', 'timetk', 'plyr', 'dplyr', 
  'dbplyr', 'magrittr', 'sarima', 'tidyverse', 'memoise', 'htmltools', 
  'formattable', 'dtplyr', 'zoo', 'forecast', 'seasonal', 'magrittr', 
  'seasonalview', 'rjson', 'rugarch', 'rmgarch', 'mfGARCH', 'feather', 
  'sparklyr', 'jcolors', 'TSA', 'microbenchmark', 'dendextend', 'vembedr', 
  'lhmetools', 'gtools', 'stringi', 'pacman', 'profmem', 'ggthemes', 
  'flyingfox', 'htmltools', 'echarts4r', 'viridis', 'hrbrthemes', 'profvis', 
  'fable', 'fabletools', 'fable.prophet', 'Rfast', 'Metrics', 'MLmetrics', 
  'microbenchmark')

# load_pkg(程序包)
suppressAll(lib(程序包))
## Error in download.file(url, destfile, method, mode = "wb", ...) : 
##   download from 'https://cran.rstudio.com/src/contrib/sparklyr_1.7.9.tar.gz' failed
load_pkg(程序包)
## Error:
## ! [conflicted] `separate` found in 2 packages.
## Either pick the one you want with `::` 
## * tidyft::separate
## * tidyr::separate
## Or declare a preference with `conflict_prefer()`
## * conflict_prefer("separate", "tidyft")
## * conflict_prefer("separate", "tidyr")
rm(程序包)

.蜀道 <- getwd() |> 
    {\(.) str_split(., '/')}() |> 
    {\(.) c('/', .[[1]][2:5])}() |> 
    {\(.) c(., 'binary.com-interview-question-data/')}() |> 
    {\(.) paste(., collapse = '/')}() |> 
    {\(.) substring(., 2)}()

## 设置googleVis选项,促使plot.gvis只陈列HTML格式的完成品。
谷歌绘图设置 <- options(gvis.plot.tag = 'chart')

## <audio src='文艺坊曲库/bigmoney.mp3' autoplay controls loop></audio>
conflict_prefer('year', 'lubridate', quiet = TRUE)
conflict_prefer('permutations', 'gtools', quiet = TRUE)


3 简介

Deriv.com - Interday High Frequency Trading Models Comparison Blooper科研论文中提及一些技术问题,故此使用Part I中的数据加以修饰并回测,再与Part II比较,筛选最优统计模型。

在此论文中,使用季节性自回归综合滑均模型系列

  • 季节性指数平滑模型(Seasonal Exponential Smoothing - Seasonal ETS)
  • 外部因素周期性自回归综合滑均模型(ARIMAX)
  • 季节性自回归综合滑均模型(SARIMA)
  • 外部因素周期性季节性自回归综合滑均模型(SARIMAX)
  • 外部因素周期性自回归分整综合滑均模型(Auto Regressive Fractionally Integrated Moving Average Exogenous - ARFIMAX)
  • 多元季节性自回归综合滑均模型(Multi-Seasonal Time Series msts()

#自动化 #科研科学 #尚未试驾 尚未试驾🚗

引用:抖音 - 电动车

引用:Tumblr - Bayesian Hidden Markov Models for Time Series

辛亥革命,铲除巫裔;
终止屠杀,拯救全球。

咱们东南亚巫裔政府屠杀680万人类的巫师Judi邪教巫裔宦官博彩庄诸国

小时候都在日本动漫文化的环境下长大。小学时期在明智华校上学就已经学会万事具备,都会提前30分钟抵达做好准备才不会仓促。自从2002年学习日语后,由于平时从旺沙马朱宿舍到拉曼学院徒步上学需要时间提前准备,所以都会将时间设为提前20分钟,基于从旺沙马朱宿舍徒步耗时45分钟左右,索性设为提前一个小时,所以愚生将所有电子仪器的标准时间都一律设为日本标准时间,然后青梅竹马的郑添和同学问过我,我回答:“我的时间必须比别人快,我的世界必须比别人快,才能占有先机~”,所以设置提前一个小时日本标准时间,再提前一小时就看到是本土提前两个小时。自从2019年在菲律宾阿里与中国同胞工作离职后,就开始思考身为🇹🇼🇨🇳中华民族,岂能沦为(大化革新的)倭奴或者倭寇,所以目前的科研语言、时间标准、甚至编码,都一律使用汉字。由于数据上的交易时间出现时差的缘故,在读取数据后就将数据上的时间更换,添加一小时时差为中国标准时间,以确保时间规律计算方面,不会出错。

进程进度函数

运算进度表 <- function(导入数据, 起点 = NULL, 秒计 = 60, .匹配元素 = '^季节性自回归_', .周期性 = TRUE) {
  ## ------------- 定时查询进度 ----------------------
  ## 每分钟自动查询与更新以上模拟预测汇价进度(储存文件量)。
  require('magrittr')
  require('tibble')
  
  if (!is.data.frame(class(导入数据))) { 
    导入数据 %<>% data.frame
  }
  
  if (.周期性 == TRUE) {
    while (1) {
      cat('当前中国标准时间:', as.character(now('Asia/Shanghai')), '\n\n')
      
      日子 = as_date(导入数据$年月日时分) %>% 
            unique
      #过滤并忽略每周闭市价时间 --- 周六凌晨12点,然后每周闭市价时间点为周五11:59PM。
      日子 <- 日子[weekdays(日子) != 'Saturday']
      
        动态日 = 日子
        
        if (is.null(起点)) { 
            起点 = 日子[1]
        } else if (is.Date(起点)) { 
            起点 = as_date(起点)
        } else {
            起点 = as_date(导入数据$年月日时分) %>% 
            unique
        }
      
        日子 = 日子[日子 >= 起点]
      
      布告栏 = list.files(
        paste0(.路径, '文艺数据库/fx/USDJPY/'), pattern = .匹配元素) %>% 
          str_replace_all('.rds', '') %>% 
          str_replace_all('.201', '_201') %>% 
          str_split_fixed('_', '2') %>% 
          as_tibble %>% 
          rename('统计模型' = 'V1', '日期' = 'V2') %>% 
          mutate(统计模型 = factor(统计模型), 日期 = as_date(日期))
        
      布告栏 = join(tibble(日期 = 动态日), 布告栏) %>% 
          as_tibble   
      布告栏 %<>% na.omit
      
      布告栏 %<>% mutate(有否 = if_else(is.na(统计模型), 0, 1)) %>% 
          spread(统计模型, 有否)
      
      布告栏进度表 <- ldply(布告栏[,-1], function(布告栏参数) {
          na.omit(布告栏参数) %>% length }) %>% 
          rename(进度 = V1) %>% 
          mutate(完成 = length(日子), 进度 = percent(进度/完成))
      
      print(布告栏进度表)
      
      进度表 = sum(布告栏进度表$进度)/sum(布告栏进度表$完成)
      cat('\n================', as.character(percent(进度表)), '================\n\n')
      
      if (进度表 == 1) break #倘若进度达到100%就停止更新。
      
      Sys.sleep(秒计) #以上ldply()耗时3~5秒,而休息时间60秒。
    }
  } else {
    
    cat('当前中国标准时间:', as.character(now('Asia/Shanghai')), '\n\n')
      
      日子 = as_date(导入数据$年月日时分) %>% 
            unique
      动态日 = 日子
        
      if (is.null(起点)) { 
          起点 = 日子[1]
      } else if (is.Date(起点)) { 
          起点 = as_date(起点)
      } else {
          起点 = as_date(导入数据$年月日时分) %>% 
          unique
      }
    
      日子 = 日子[日子 >= 起点]
    
      布告栏 = list.files(paste0(.路径, '文艺数据库/fx/USDJPY/'), pattern = .匹配元素) %>% 
          str_replace_all('.rds', '') %>% 
          str_replace_all('.201', '_201') %>% 
          str_split_fixed('_', '2') %>% 
          as_tibble %>% 
          rename('统计模型' = 'V1', '日期' = 'V2') %>% 
          mutate(统计模型 = factor(统计模型), 日期 = as_date(日期))
        
      布告栏 = join(tibble(日期 = 动态日), 布告栏) %>% 
          as_tibble
      布告栏 %<>% na.omit
      
      布告栏 %<>% mutate(有否 = if_else(is.na(统计模型), 0, 1)) %>% 
          spread(统计模型, 有否)
        
      布告栏进度表 <- ldply(布告栏[,-1], function(布告栏参数) {
          na.omit(布告栏参数) %>% length }) %>% 
          rename(进度 = V1) %>% 
          mutate(完成 = length(日子), 进度 = percent(进度/完成))
                
    print(布告栏进度表)
    
    进度表 = sum(布告栏进度表$进度)/sum(布告栏进度表$完成)
    cat('\n================', as.character(percent(进度表)), '================\n\n')
    }
  }


4 数据

4.1 读取数据

Part I中使用的原始数据已加以修饰并储存,Part IIPart III次论文读取该数据,将网页轻巧化、省略掉修饰数据的一栏,(第III部)总结使用2018年上半年汇价数据即可,节省许多科研时间。

基于1200分钟为一个最优循环期数据量,此篇文章将样本数据过滤为2017-12-31 12:00:00 CST(中国标准时间)2018-07-01 00:00:00 CST(中国标准时间),这样所预测出来的汇价会从2018-01-01 00:00:00 CST(中国标准时间)2018-07-01 00:00:00 CST(中国标准时间)七个月整的汇价数据,再来比较闭市价误差,2018年汇价数据第一周并无闭市价,估计是年假休市,再比较误差时会忽略NA值时间的数据。

# --------- eval = FALSE ---------
## 检验是否已设置途径。
if (!exists('.蜀道')) {
  .蜀道 <- getwd() |> 
    {\(.) str_split(., '/')}() |> 
    {\(.) c('/', .[[1]][2:5])}() |> 
    {\(.) c(., 'binary.com-interview-question-data/')}() |> 
    {\(.) paste(., collapse = '/')}() |> 
    {\(.) substring(., 2)}()
}

if (!exists('.蜀道仓库')) {
  .蜀道仓库 <- paste0(.蜀道, '文艺数据库/fx/USDJPY/仓库/')
}

## 倘若环境尚未有数据,读取文件数据。
## **小插曲**:数据应该使用经过过滤`NA值`和重新赋值`周`、`周分计`、`日分计`、`时分计`、`序列`等参数和数据的**样本2**,而非**样本1**。
if (!exists('样本')) {
  样本 <- readRDS(paste0(.蜀道, '文艺数据库/fx/USDJPY/样本2.rds'))
  }

## 数据从原本 1324800 减至 1317600
# 样本[!is.na(闭市价)][]
## 1317600分钟 除以 7200分钟(一周) = 183周数
## 1317600分钟 除以 1440分钟(一天) = 915天数
## 1317600分钟 除以 720分钟(一小时) = 1830时数
样本[!is.na(闭市价)]

年月日时分 年份 季度 月份 周 周日 周分计 日分计 时分计 序列 日期 闭市价 1 2015-01-05 00:01:00 2015 1 1 1 周一 1 1 1 1 2015-01-05 121. 2 2015-01-05 01:01:00 2015 1 1 1 周一 61 61 1 61 2015-01-05 121. 3 2015-01-05 02:01:00 2015 1 1 1 周一 121 121 1 121 2015-01-05 120. 4 2015-01-05 03:01:00 2015 1 1 1 周一 181 181 1 181 2015-01-05 120. 5 2015-01-05 04:01:00 2015 1 1 1 周一 241 241 1 241 2015-01-05 120. 6 2015-01-05 05:01:00 2015 1 1 1 周一 301 301 1 301 2015-01-05 120. 7 2015-01-05 06:01:00 2015 1 1 1 周一 361 361 1 361 2015-01-05 121. 8 2015-01-05 07:01:00 2015 1 1 1 周一 421 421 1 421 2015-01-05 121. 9 2015-01-05 08:01:00 2015 1 1 1 周一 481 481 1 481 2015-01-05 120. 10 2015-01-05 09:01:00 2015 1 1 1 周一 541 541 1 541 2015-01-05 120. # … with 1,317,590 more rows

基准 <- 样本[年份 == 2018]$日期[1]

汇总2018年 <- 样本 %>% 
  filter_dt(年月日时分 >= as_datetime('2017-12-31 12:00:00 CST') & 
              年月日时分 <= as_datetime('2018-07-01 00:00:00 CST'))

## 绘制样本图表
汇总2018年[c(1:3, (nrow(汇总2018年) - 3):nrow(汇总2018年)),] |> 
    {\(.) kbl(., caption = '分计汇价(中国标准时间 2017年12月31日中午12点正 ~ 2018年7月1日午夜12点正)', escape = FALSE)}() |> 
  ## https://www.w3schools.com/cssref/css_colors.asp
  ## https://public.tableau.com/en-us/gallery/100-color-palettes?gallery=votd
    {\(.) row_spec(., 
      0, background = 'DimGrey', color = 'gold', bold = TRUE)}() |> 
    {\(.) column_spec(., 1, background = 'CornflowerBlue')}() |> 
    {\(.) column_spec(., 2, background = 'Gray')}() |> 
    {\(.) column_spec(., 3, background = 'DarkGrey')}() |> 
    {\(.) column_spec(., 4, background = 'Gray')}() |> 
    {\(.) column_spec(., 5, background = 'DarkGrey')}() |> 
    {\(.) column_spec(., 6, background = '#4897D8')}() |> 
    {\(.) column_spec(., 7, background = '#556DAC')}() |> 
    {\(.) column_spec(., 8, background = '#92AAC7')}() |> 
    {\(.) column_spec(., 9, background = '#556DAC')}() |> 
    {\(.) column_spec(., 10, background = '#375E97')}() |> 
    {\(.) column_spec(., 11, background = 'CornflowerBlue')}() |> 
    {\(.) column_spec(., 
      12, background = 'LightGray', color = 'goldenrod')}() |> 
    {\(.) kable_styling(., 
      bootstrap_options = c(
        'striped', 'hover', 'condensed', 'responsive'))}() |> 
  ##`full_width = FALSE`是将每列设置为伸缩性自动调整宽度。
    {\(.) kable_material(., full_width = FALSE)}() |> 
    {\(.) scroll_box(., width = '100%', fixed_thead = TRUE, height = '490px')}()
分计汇价(中国标准时间 2017年12月31日中午12点正 ~ 2018年7月1日午夜12点正)
年月日时分 年份 季度 月份 周日 周分计 日分计 时分计 序列 日期 闭市价
2018-01-02 00:01:00 2018 1 1 1 周二 1 1 1 1123201 2018-01-02 112.6295
2018-01-02 01:01:00 2018 1 1 1 周二 61 61 1 1123261 2018-01-02 112.6065
2018-01-02 02:01:00 2018 1 1 1 周二 121 121 1 1123321 2018-01-02 112.7690
2018-06-29 21:00:00 2018 2 6 26 周五 7020 1260 60 1310220 2018-06-29 110.7970
2018-06-29 22:00:00 2018 2 6 26 周五 7080 1320 60 1310280 2018-06-29 110.9065
2018-06-29 23:00:00 2018 2 6 26 周五 7140 1380 60 1310340 2018-06-29 110.6945
2018-06-30 00:00:00 2018 2 6 26 周六 7200 1440 60 1310400 2018-06-30 110.6870

数据 : 187200行 x 12列

以上图表显示数据日期,由2018-01-02 至 2018-06-30,而该数据也是在论文(Part I)(Part II)中使用,并且相符。使用同样的数据,是为了在回测多元统计模型,才能获知并筛选最优统计模型。

5 统计建模

在此先过滤数据,从2016年的第一个预测日(开始,也就是读取的样本数据中的第二年数据开始),与论文(Part I)(Part II)中相符。

5.1 季节性指数平滑模型(Seasonal ETS))ts() & ets()

5.1.0.1 20小时一周期(1200分钟循环1次)

5.2 自回归综合滑均模型系列(ARIMA Series)

5.2.1 季节性数据建模

ARIMA(p,d,q)模型中

  • p是自回归(AR)的项数,用来获取自变量
  • d是差分(I)的系数,为了使时间序列平稳
  • q是移动平均(MA)的项数,为了使其光滑

引用:ARIMA模型中的三个参数(p, d, q)都是什么意思?

运用SPSS 19.0软件中的相关模块进行数据处理和分析。本研究是以月份为时间单位的研究序列,故选择复合季节模型[5, 6]:ARIMA(p,d,q)(P,D,Q)s,参数p为非季节性自回归阶数,d为一般差分阶数,q为非季节性滑动平均阶数;P为季节性自回归阶数,D为季节差分阶数,Q为季节性移动平均阶数,s为季节模型的时间单位相应周期(本研究s=12)。

引用:北京市昌平区肺结核发病数ARIMA模型预测

Deriv.com - Interday High Frequency Trading Models Comparison Review (Part II)中,结论1200分钟为最优数据量,故此我将数据量设置为(1200分钟,也就是等于20个交易小时),去预测下一分钟交易价格。然而如何灵活设置周期量与周期数、运用循环周期呢?在此尝试回测方能得以证实。

source('函数/季节性自回归.R')

时间索引 <- unique(样本$日期)
# 基准 <- filter(样本, 年份 == 2016)$日期[1] #"2016-01-04" 第2年第1个交易日
基准 <- 样本[年份 == 2016]$日期[1]
时间索引 %<>% .[. >= 基准]
时间索引 %<>% .[1:6] #筛选数据中的前6个日期为样本
# 时间索引 %<>% .[. >= as_date('2016-01-04')]
数据量 <- 1200 #筛选数据中的最后1200观测值:样本[(.N - (数据量 - 1)):.N]
预测时间单位 <- 1

.模型选项 = c('自动化', '自回归滑均')
# .模型选项 %<>% .[1]
# .模型选项 %<>% .[2]
.差分阶数 = 0:2
.季节性差分阶数 = 0:1 
季节性与否 = c(TRUE, FALSE)
## https://stackoverflow.com/questions/37400062/seasonality-in-auto-arima-from-forecast-package
#近似值与否 <- c(TRUE, FALSE)
#逐步精化与否 <- c(TRUE, FALSE)

## .时序规律 <- c(0, 0, 0)
.时序规律 <- permutations(6, 3, 0:5, repeats.allowed = TRUE) %>% 
  as.data.table
.时序规律 <- setnames(.时序规律, old = c('V1', 'V2', 'V3'), new = c('自回归阶数', '差分阶数', '滑均阶数'))[差分阶数 <= 2]

## .季节性规律参数 <- c(0, 0, 0)
.季节性规律参数 <- permutations(6, 3, 0:5, repeats.allowed = TRUE) %>% 
  as.data.table
.季节性规律参数 <- setnames(.季节性规律参数, old = c('V1', 'V2', 'V3'), new = c('季节性自回归阶数', '季节性差分阶数', '季节性滑均阶数'))[季节性差分阶数 <= 2]

5.2.1.1 20小时一周期(1200分钟循环1次)

循环周期 = 1200

## 由于forecast::Arima()出现多种错误信息,故此忽略使用该函数建模。
## https://github.com/englianhu/binary.com-interview-question/issues/6
llply(.模型选项[1], function(模型) {
  
  if (模型 == '自动化') {
    季回归0 <- llply(.差分阶数, function(差分阶数) {
      季回归1 <- llply(.季节性差分阶数, function(季节性差分阶数) {
        季回归2 <- llply(季节性与否, function(季节) {
          季回归3 <- llply(时间索引, function(时序) {
            成效 <- 季节性自回归(
              时间索引 = 时序, 样本 = 样本, 路径 = .路径, 
              数据量 = 数据量, 循环周期 = 循环周期, 
              预测时间单位 = 预测时间单位, .模型选项 = 模型, 
              .差分阶数 = 差分阶数, .季节性差分阶数 = 季节性差分阶数, 
              季节性与否 = 季节, 静态与否 = FALSE, 记载自回归与否 = FALSE, 
              信息量准则 = c('aicc', 'aic', 'bic'), 逐步精化与否 = TRUE, 
              逐步精化量 = 94, #近似值与否=(length(x)>150|frequency(x)>12), 
              缩写 = NULL, 计策谋略 = NULL, #x = y, 
              趋势 = NULL, 测试 = c('kpss', 'adf', 'pp'), 测试参数 = list(), 
              季节性测试参数 = list(), 
              季节性测试 = c('seas', 'ocsb', 'hegy', 'ch'), 
              允许截距与否 = TRUE, 允许包含均值与否 = TRUE, 
              博克斯考克斯变换 = NULL, 
              偏差调整与否 = FALSE, 多管齐下与否 = FALSE, 核心量 = 2)
            })
          })
        })
      })
    
  } else if (模型 == 'Arima') {
    季回归0 <- llply(1:nrow(.时序规律), function(迭数1) {
      季回归1 <- llply(1:nrow(.季节性规律参数), function(迭数2) {
        季回归2 <- llply(时间索引, function(时序) {
          成效 <- 季节性自回归(时间索引 = 时序, 样本 = 样本, 路径 = .路径, 
            数据量 = 数据量, 预测时间单位 = 预测时间单位, 
            .模型选项 = 模型, .时序规律 = unlist(.时序规律[迭数1,]), 
            .季节性规律参数 = unlist(.季节性规律参数[迭数2,]), 趋势 = NULL, 
            允许包含均值与否 = TRUE, 允许截距与否 = FALSE, 
            包含均值与否 = TRUE, 包含截距 = TRUE, 
            #包含常数与否 = 包含常数与否, 
            #统计模型 = NULL, 博克斯考克斯变换 = 博克斯考克斯变换, x = y, 
            偏差调整与否 = FALSE, 计策谋略 = c('CSS-ML', 'ML', 'CSS'))
        })
      })
    })
    
  } else {
    
  }
  return(srm)
})

5.2.1.2 10小时一周期(600分钟循环2次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.3 6.67小时一周期(400分钟循环3次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.4 5小时一周期(300分钟循环4次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.5 4小时一周期(240分钟循环5次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.6 3.33小时一周期(200分钟循环6次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.7 2.5小时一周期(150分钟循环8次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.8 2小时一周期(120分钟循环10次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.9 1.67小时一周期(100分钟循环12次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.10 1.33小时一周期(80分钟循环15次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.11 1小时一周期(60分钟循环20次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.12 0.83小时一周期(50分钟循环24次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.13 0.67小时一周期(40分钟循环30次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.14 半小时一周期(30分钟循环40次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.15 0.40小时一周期(24分钟循环50次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.16 0.33小时一周期(20分钟循环60次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.17 0.27小时一周期(16分钟循环75次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.18 0.25小时一周期(15分钟循环80次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.19 0.20小时一周期(12分钟循环100次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.20 0.17小时一周期(10分钟循环120次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.21 0.13小时一周期(8分钟循环150次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.22 0.10小时一周期(6分钟循环200次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.23 0.08小时一周期(5分钟循环240次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.24 0.07小时一周期(4分钟循环300次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.25 0.05小时一周期(3分钟循环400次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.26 0.03小时一周期(2分钟循环600次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.1.27 0.02小时一周期(1分钟循环1200次)

培训数据$闭市价 %>% 
    matrix(dimnames = list(培训数据$年月日时分, '闭市价')) %>% 
    tk_ts(frequency = 60)

5.2.2 自回归综合滑均模型(ARIMA)ts() & auto.arima()

5.2.3 外部因素周期性自回归综合滑均模型(ARIMAX)ts() & auto.arima()

5.2.4 季节性自回归综合滑均模型(SARIMA)ts() & auto.arima()

5.2.5 外部因素周期性季节性自回归综合滑均模型(SARIMAX)ts() & auto.arima()

时间索引 <- unique(样本$日期)
# 基准 <- filter(样本, 年份 == 2016)$日期[1] #"2016-01-04" 第2年第1个交易日
基准 <- 样本[年份 == 2016]$日期[1]
时间索引 %<>% .[. >= 基准]
时间索引 %<>% .[1:6] #筛选数据中的前6个日期为样本
# 时间索引 %<>% .[. >= as_date('2016-01-04')]
数据量 <- 1200 #筛选数据中的最后1200观测值:样本[(.N - (数据量 - 1)):.N]
预测时间单位 <- 1

.模型选项 = c('自动化', '自回归滑均')
# .模型选项 %<>% .[1]
# .模型选项 %<>% .[2]
.差分阶数 = 0:2
.季节性差分阶数 = 0:1 
季节性与否 = c(TRUE, FALSE)
## https://stackoverflow.com/questions/37400062/seasonality-in-auto-arima-from-forecast-package
#近似值与否 <- c(TRUE, FALSE)
#逐步精化与否 <- c(TRUE, FALSE)

## .时序规律 <- c(0, 0, 0)
.时序规律 <- permutations(6, 3, 0:5, repeats.allowed = TRUE) %>% 
  as.data.table
.时序规律 <- setnames(.时序规律, old = c('V1', 'V2', 'V3'), new = c('自回归阶数', '差分阶数', '滑均阶数'))[差分阶数 <= 2]

## .季节性规律参数 <- c(0, 0, 0)
.季节性规律参数 <- permutations(6, 3, 0:5, repeats.allowed = TRUE) %>% 
  as.data.table
.季节性规律参数 <- setnames(.季节性规律参数, old = c('V1', 'V2', 'V3'), new = c('季节性自回归阶数', '季节性差分阶数', '季节性滑均阶数'))[季节性差分阶数 <= 2]
# --------- eval=FALSE ---------
llply(.模型选项, function(模型) {
  
  if (模型 == '自动化') {
    季回归0 <- llply(.差分阶数, function(差分阶数) {
      季回归1 <- llply(.季节性差分阶数, function(季节性差分阶数) {
        季回归2 <- llply(季节性与否, function(季节) {
          季回归3 <- llply(时间索引, function(时序) {
            成效 <- 季节性自回归(时间索引 = 时序, 样本 = 样本, 路径 = .路径, 
              数据量 = 数据量, 预测时间单位 = 预测时间单位, .模型选项 = 模型, 
              .差分阶数 = 差分阶数, .季节性差分阶数 = 季节性差分阶数, 
              季节性与否 = 季节, 静态与否 = FALSE, 记载自回归与否 = FALSE, 
              信息量准则 = c('aicc', 'aic', 'bic'), 
              逐步精化与否 = TRUE, 逐步精化量 = 94, 
              #近似值与否=(length(x)>150|frequency(x)>12), 
              缩写 = NULL, 计策谋略 = NULL, #x = y, 
              趋势 = NULL, 测试 = c('kpss', 'adf', 'pp'), 
              测试参数 = list(), 季节性测试参数 = list(), 
              季节性测试 = c('seas', 'ocsb', 'hegy', 'ch'), 
              允许截距与否 = TRUE, 允许包含均值与否 = TRUE, 博克斯考克斯变换 = NULL, 
              偏差调整与否 = FALSE, 多管齐下与否 = FALSE, 核心量 = 2)
            })
          })
        })
      })
    
  } else if (模型 == 'Arima') {
    季回归0 <- llply(1:nrow(.时序规律), function(迭数1) {
      季回归1 <- llply(1:nrow(.季节性规律参数), function(迭数2) {
        季回归2 <- llply(时间索引, function(时序) {
          成效 <- 季节性自回归(时间索引 = 时序, 样本 = 样本, 路径 = .路径, 
            数据量 = 数据量, 预测时间单位 = 预测时间单位, 
            .模型选项 = 模型, .时序规律 = unlist(.时序规律[迭数1,]), 
            .季节性规律参数 = unlist(.季节性规律参数[迭数2,]), 趋势 = NULL, 
            允许包含均值与否 = TRUE, 允许截距与否 = FALSE, 
            #包含常数与否 = 包含常数与否, 
            #统计模型 = NULL, 博克斯考克斯变换 = 博克斯考克斯变换, x = y, 
            偏差调整与否 = FALSE, 计策谋略 = c('CSS-ML', 'ML', 'CSS'))
        })
      })
    })
    
  } else {
    
  }
  return(srm)
})

5.3 季节性自回归综合滑均模型(SARIMA)msts() & auto.arima()

5.4 季节性自回归综合滑均模型(SARIMA)fable & fabletools

https://otexts.com/fpp3/seasonal-arima.html

5.5 自回归综合滑均模型(ARFIMA / ARFIMAX) arfima()

5.5.1 外部因素周期性自回归综合滑均模型(Auto Regressive Fractionally Integrated Moving Average Exogenous - ARFIMAX)

5.6 msts() & hw()

After looking a bit more, I’ve came across this question where a user wanted to use the hw method to forecast half-hourly electricity demand using the taylor dataset available in the forecast package.

As Professor Rob Hyndman suggest in the response to the linked question, the double seasonal Holt Winters model method dshw from the forecast package can be used to deal with half-hourly data.

After removing the yearly seasonality parameter (seasonal.periods = 8760) in the definition of my msts object, I’ve ran the model and it provided a pretty accurate result.

How can I apply Seasonal Exponential Smoothing forecasting method to hourly data in R

5.7 msts() & tbats()

5.7.1 Seasonal Data Modeling

I set the length of data as weekly (7200 minutes which is 5 trading days) to forecast 1440 minutes (1440 minutes is a trading day).

Chapter 7 Multivariate TS Analysis in Introduction to Time Series Analysis and Forecasting in R, but I use univariate due to some errors as mentioned in beginning.

I tried to use weeks(1), months(1), months(3), years(1) but there is not constant observations, we can refer to The seasonal period.

Here I filter up the data as below :

  • 5 days * 1440 mins = 7200 mins = weekly
  • 22 days * 1440 mins = 31680 mins = monthly
  • 3 months * 22 days * 1440 mins = 95040 mins = quarterly
  • 52 weeks * 5 days * 1440 mins = 374400 mins = yearly

5.7.2 (周 ∈ 分) >> 日

I set the length of data as monthly (22 days * 1440 mins = 31680 mins minutes which is 22 trading days), nested seasonal weekly (5 days * 1440 mins = 7200 mins minutes which is 5 trading days) and 1440 minutes (1440 minutes is a trading day) to forecast 1440 minutes (1440 minutes is a trading day).

  • data observation length 22 days * 1440 mins = 31680 mins
  • seasonal 5 days * 1440 mins = 7200 mins
  • sub-seasonal 1440 mins
  • forecast 1440 mins
# --------- eval=FALSE ---------
时间索引 <- unique(样本$date)
基准 <- 样本[year == 2016]$date[1] #"2016-01-04" #1st trading date in 2nd year
时间索引 %<>% .[. >= 基准]
#时间索引 %<>% .[. >= as_date('2016-01-04')]
数据量 <- 7200 #last 7200  observations 样本[(.N - (数据量 - 1)):.N]
预测时间单位 <- 1440
hrz2 <- 1440

llply(ets.m, function(模型) {
  mstseas(时间索引 = 时间索引, 样本, 
        数据量 = 数据量, 预测时间单位 = 预测时间单位, 
        hrz2 = hrz2, .模型选项 = 模型)
  })

5.7.3 (周 ∈ 季) >> 日

I set the length of data as quarterly (3 months * 22 days * 1440 mins = 95040 mins minutes which is 66 trading days), nested seasonal weekly (5 days * 1440 mins = 7200 mins minutes which is 5 trading days) and 1440 minutes (1440 minutes is a trading day) to forecast 1440 minutes (1440 minutes is a trading day).

  • data observation length 3 months * 22 days * 1440 mins = 95040 mins
  • seasonal 5 days * 1440 mins = 7200 mins
  • sub-seasonal 1440 mins
  • forecast 1440 mins

5.7.4 (周 ∈ 年) >> 日

I set the length of data as yearly (52 weeks * 5 days * 1440 mins = 374400 mins minutes which is 260 trading days), nested seasonal weekly (5 days * 1440 mins = 7200 mins minutes which is 5 trading days) and 1440 minutes (1440 minutes is a trading day) to forecast 1440 minutes (1440 minutes is a trading day).

  • data observation length 52 weeks * 5 days * 1440 mins = 374400 mins
  • seasonal 5 days * 1440 mins = 7200 mins
  • sub-seasonal 1440 mins
  • forecast 1440 mins

5.7.5 (分 ∈ 季) >> 日

I set the length of data as quarterly (3 months * 22 days * 1440 mins = 95040 mins minutes which is 66 trading days), nested seasonal monthly (22 days * 1440 mins = 31680 mins minutes which is 22 trading days) and 1440 minutes (1440 minutes is a trading day) to forecast 1440 minutes (1440 minutes is a trading day).

  • data observation length 3 months * 22 days * 1440 mins = 95040 mins
  • seasonal 22 days * 1440 mins = 31680 mins
  • sub-seasonal 1440 mins
  • forecast 1440 mins


6 模型比较

6.1 Read Models

6.1.1 Grouped Models

VAR分析中的一个中心问题是找到滞后的阶数,以产生最佳结果。模型比较通常基于信息标准,例如AIC,BIC或HQ。通常,由于是小样本预测,AIC优于其他标准。但是,BIC和HQ在大型样本中效果很好

引用:R语言用向量自回归(VAR)进行经济数据脉冲响应研究分析

Here I read the saved models.

Due to the models only forecast 1440 mins (but not 7200 mins) in advance, here I no need to filter the forecast price.

7 结论

7.1 摘要

大秦赋 (Chinese Emperor)
春秋战国《礼记•经解
孔子曰:『君子慎始,差若毫厘,缪以千里。』

《礼记·经解》孔子曰:「君子慎始。差若毫厘,谬以千里。」2

引用:「快懂百科」《礼记•经解》第一范文网:差之毫厘,谬以千里的故事「百度百科」春秋时期孔子作品《礼记•经解》「當代中國」差之毫釐 謬以千里

7.2 Final Conclude

From final stage models comparison, we know that ******* is the βest model.

7.3 Future Studies

Next papers will compare tbats, midas, sarimax etc.


8 附录

8.1 幕后花絮

8.2 文书明细

以下乃此文书的文件信息。

  • 文集建立日:2021-02-03
  • 文集最新更新日:2022-12-29
  • R version 4.2.2 (2022-10-31)
  • rmarkdown 程序包版本:2.19
  • 文集版本:0.2.1
  • 文集作者:®γσ, ξηg Lιαη Ημ
  • 猫城:源代码
  • 追加附属信息
#suppressMessages(require('formattable', quietly = TRUE))
#suppressMessages(require('knitr', quietly = TRUE))
#suppressMessages(require('kableExtra', quietly = TRUE))
#suppressMessages(require('magittr', quietly = TRUE))
#suppressMessages(require('devtools', quietly = TRUE))

系统信息1 <- session_info()$platform |> 
    unlist() |> 
    {\(.) data.frame(row.names = 1:length(.), 
                     Category = names(.), session_info = .)}()

系统信息2 <- data.frame(Sys.info()) |> 
    {\(.) data.frame(Category = row.names(.), Sys.info = .[,1])}()

#remarks, dim(系统信息1), dim(系统信息2)
if (nrow(系统信息1) == 11 && nrow(系统信息2) == 8) {
  系统信息2 <- 系统信息2 |> 
    {\(.) rbind(., data.frame(
    Category = c('rmarkdown', 'rsconnect', '当前时间'), 
    Sys.info = c(as.character(getwd()), 
                 as.character(packageVersion('rsconnect')), 
                 paste(as.character(
                   lubridate::now('Asia/Shanghai')), 'CST 中国标准时间 🗺'))))}()
  
} else if (nrow(系统信息1) == 10 && nrow(系统信息2) == 8) {
  系统信息1 <- rbind(系统信息1, data.frame(Category = '', session_info = ''))
  
  系统信息2 <- 系统信息2 |> 
    {\(.) rbind(., data.frame(
    Category = c('rmarkdown', 'rsconnect', '当前时间'), 
    Sys.info = c(as.character(getwd()), 
                 as.character(packageVersion('rsconnect')), 
                 paste(as.character(
                   lubridate::now('Asia/Shanghai')), 'CST 中国标准时间 🗺'))))}()
}

系统信息 <- cbind(系统信息1, 系统信息2)
names(系统信息) <- c('分类1', '访谈信息1', '分类2', '访谈信息2')
系统信息$分类1 <- c('版本', '操作系统', '系统', '界面', '语言', '核对', 
              '©标准库', '时区', '日期', '®文艺坊版本', 'Pandoc瑞士军刀')
系统信息$分类2 <- c('系统名称', '发布', '版本', '元素节点', '机器', '登录', 
              '用户', '活跃用户', 'rmarkdown (®降价编译)', 
              'rsconnect (®s联通)', '当前时间')
rm(系统信息1, 系统信息2)

系统信息 |> 
  {\(.) 
    kbl(., caption = '附加访谈信息:')}() |> 
  {\(.) 
    kable_styling(
      ., bootstrap_options = c('striped', 'hover', 'condensed', 'responsive'))}() |> 
  {\(.) 
    row_spec(., 0, background = 'DimGrey', color = 'yellow')}() |> 
  {\(.) 
    column_spec(., 1, background = 'CornflowerBlue', color = 'red')}() |> 
  {\(.) 
    column_spec(., 2, background = 'grey', color = 'black')}() |> 
  {\(.) 
    column_spec(., 3, background = 'CornflowerBlue', color = 'blue')}() |> 
  {\(.) 
    column_spec(., 4, background = 'grey', color = 'white')}() |> 
  {\(.) 
    row_spec(., 11, bold = TRUE, color = 'yellow', background = '#D7261E')}()
附加访谈信息:
分类1 访谈信息1 分类2 访谈信息2
版本 R version 4.2.2 (2022-10-31) 系统名称 Linux
操作系统 RedFlag Desktop 11.0 发布 5.10.0-1-amd64
系统 x86_64, linux-gnu 版本 #1 SMP Debian 5.10.40-1~rf11u1.2 (2022-09-22)
界面 X11 元素节点 Chinese-Emperor
语言 zh_CN:en 机器 x86_64
核对 en_US.UTF-8 登录 chinese
©标准库 en_US.UTF-8 用户 chinese
时区 Asia/Shanghai 活跃用户 chinese
日期 2022-12-29 rmarkdown (®降价编译) /home/chinese/文档/猫城/binary.com-interview-question
®文艺坊版本 2.19.2 @ /usr/lib/rstudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown) rsconnect (®s联通) 0.8.28
Pandoc瑞士军刀 当前时间 2022-12-29 21:43:04.657493 CST 中国标准时间 🗺

  1. 尤其是咱们东南亚巫裔政府施展巫术屠杀680万人类的巫师Judi邪教巫裔宦官博彩庄诸国↩︎

  2. HTML Color Codes↩︎